package br.edu.udc.sistemas.ia5.tableModel;

import javax.swing.table.AbstractTableModel;

import br.edu.udc.sistemas.ia5.entity.Entity;
import br.edu.udc.sistemas.ia5.util.Reflection;


public class GenericTableModel extends AbstractTableModel {
	
	private Entity list[] = new Entity[0];
	private Entity obj;
	
	public GenericTableModel(Entity obj) {
		this.obj = obj;
	}
	
	public Entity[] getList() {
		return this.list;
	}

	public void setList(Entity list[]) {
		this.list = list;
		//Avisa a JTABLE que os dados mudaram para ela atualizar-se
		this.fireTableDataChanged();
	}

	@Override
	public int getColumnCount() {
		return obj.getFieldNames().length;
//		try {
//			return Reflection.getFields(this.obj.getClass()).length;
//		} catch (Exception e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//		return 0;
	}

	@Override
	public int getRowCount() {
		return this.list.length;
	}

	@Override
	public String getValueAt(int row, int column) {
		return this.list[row].getFieldValues()[column];
	}
	
//	
//	@Override
//	public Entity getValueAt(int row, int column) {
//		return this.list[row].getFieldValues()[column];
////		Field fields[] = null;
//		try {
//			fields = Reflection.getFields(this.obj.getClass());
//		} catch (Exception e1) {
//			// TODO Auto-generated catch block
//			e1.printStackTrace();
//		}
//		try {
//			return fields[row].get(fields[column]);
//		} catch (IllegalArgumentException | IllegalAccessException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//		return null;
//	}
	
	@Override
	public String getColumnName(int column) {
		return this.obj.getFieldNames()[column];
//		try {
//			return Reflection.getFields(this.obj.getClass())[column].toString();
//		} catch (Exception e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//		return null;
	}

	public Entity getObjectAtRow(int row) {
		return this.list[row];
	}
}
